package java_thinking.unit_12;

/**
 * @Description : 有可能在捕获异常之后抛出另一种异常，这样的情况得到的效果类似fillInStackTrace(),
 * 有关原来异常发生点的信息会丢失，剩下的就是与新的抛出点有关的信息
 *
 *      永远不必为清理前一个异常对象担心，或者说为异常对象的清理而担心，他们都是用new在堆上创建的对象，
 *      所以垃圾回收器会自动把它们清理掉
 *
 * @author: cww
 * @DateTime: 2019/3/22 19:03
 */

class OneException extends Exception{
    public OneException(String s){
        super(s);
    }
}

class TwoException extends Exception {
    public TwoException(String s){
        super(s);
    }
}
public class RethrowNew {
    public static void f() throws OneException {
        System.out.println("originating the exception in f()");
        throw new OneException("throw from f()");
    }
    public static void main(String[] args) {
        try {
            try {
                f();
            } catch (OneException e) {
                System.out.println("Caught in inner try, e.printStackTrace()");
                e.printStackTrace(System.out);
                throw new TwoException("from inner try");
            }
        } catch (TwoException e) {
            System.out.println("Caught in outer try, e.printStackTrace()");
            //最后这个异常打印出来只能看到是main抛出错误了，而不知道OneException里面发生了什么事
            e.printStackTrace(System.out);
        }
    }
}
